﻿using SIIE_ERP.BaseDatos.Configuracion;
using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Login
{
    public static class Login_StoredProcedures
    {
        public static DataTable EmpresaLogin()
        {
            string Query = "SELECT DISTINCT RFC FROM dbo_Sec_MenuUser";
           

            return SrvDB.ExecuteQuery_Get(Query);

        }
        public static Respuesta SP_Login(string Usuario, string Contrasena,string Rfc) {

            DataTable Usuarios = new DataTable();
            int ContarUsuarios = 0;
            int ContarUsuarios_Contrasena = 0;
            int index = 0;

            
            dbo_Sec_Usuario Sec_Usuarios = new dbo_Sec_Usuario();
          
            try
            {

                Usuarios = Sec_Usuarios.Get_Usuarios();
            }
            catch (Exception ex)
            {
                return new Respuesta(100, ex.Message); 
            }

            for (int i = 0; i < Usuarios.Rows.Count; i++) {

                if (Usuarios.Rows[i]["UserName"].ToString().Equals(Usuario))
                {
                    ContarUsuarios++;
                    index = i;
                }
            }

            if (ContarUsuarios == 1)
            {
                DateTime LastTime = Convert.ToDateTime(Usuarios.Rows[index]["Last_Time"].ToString());
                int Num_Intentos = Convert.ToInt32(Usuarios.Rows[index]["Num_Intentos"].ToString());

                if (Num_Intentos < 3 || LastTime.AddMinutes(5) < DateTime.Now)
                {
                    for (int i = 0; i < Usuarios.Rows.Count; i++)
                    {
                        if (Usuarios.Rows[i]["UserName"].ToString().Equals(Usuario) && CypherClass.DescifrarTexto(Usuarios.Rows[i]["Residencia"].ToString()).Equals(Contrasena))
                        {
                            ContarUsuarios_Contrasena++;
                            index = i;
                        }
                    }

                    if (ContarUsuarios_Contrasena == 1)
                    {
                        var Id_Usuario = dbo_Sec_Usuario_RFC.Get_Sec_Usuario_RFC_By_UserName(Usuario).Rows[0]["Id_Usuario"];
                        string[] CadenaLicencia = CypherClass.DescifrarTexto(dbo_Sec_Usuario_RFC.Get_Sec_Usuario_RFC_By_Id_Rfc(Rfc, Convert.ToInt32( Id_Usuario)).Rows[0]["Genero"].ToString()).Split('|');

                        DateTime Fecha_Licencia = Convert.ToDateTime(CadenaLicencia[0].ToString());
                      //  DateTime Fecha_Licencia = Convert.ToDateTime(CypherClass.DescifrarTexto(Usuarios.Rows[index]["Genero"].ToString()));
                        Sec_Usuarios.Update_Usuario_Num_Intentos(Usuarios.Rows[index]["Id_Usuario"].ToString(), 0);
                        if (CadenaLicencia[3].ToString().Equals("SinLicencia"))
                        {
                            return new Respuesta(4, "Su Licencia a cambiado de Tipo.");

                        }
                         if (Usuario != CadenaLicencia[1].ToString()  ||  Rfc !=CadenaLicencia[2].ToString())
                        {
                            return new Respuesta(4, "Error al iniciar sesión contacte a su Administrador del Sistema.");
                        }
                        if (Fecha_Licencia < DateTime.Now)
                        {
                            return new Respuesta(4, "Su licencia ha expirado");
                        }
                        else if (Fecha_Licencia.AddDays(-10) < DateTime.Now)
                        {
                            return new Respuesta(5, "Su licencia está a punto de expirar");
                        }
                        else
                        {
                            return new Respuesta(6, "Usuario y Contraseña correctos");
                        }

                       //Valida licencia contra usuario y rfc

                       
                    }
                    else
                    {
                        Sec_Usuarios.Update_Usuario_Num_Intentos(Usuarios.Rows[index]["Id_Usuario"].ToString(), Int32.Parse(Usuarios.Rows[index]["Num_Intentos"].ToString()) + 1);
                        return new Respuesta(3, "Contraseña Incorrecta");
                    }
                }
                else
                {
                    return new Respuesta(2, "Esperar al menos 5 minutos para poder inciciar sesión de nuevo");
                }
            }
            else 
            {
                return new Respuesta(1, "Usuario Incorrecto");
            }
        }

        public static string SP_Login(string Usuario)
        {
            DataTable Usuarios = new DataTable();
            int ContarUsuarios = 0;            
            int index = 0;

            dbo_Sec_Usuario Sec_Usuarios = new dbo_Sec_Usuario();

            Usuarios = Sec_Usuarios.Get_Usuarios();

            for (int i = 0; i < Usuarios.Rows.Count; i++)
            {

                if (Usuarios.Rows[i]["UserName"].ToString().Equals(Usuario))
                {
                    ContarUsuarios++;
                    index = i;

                    return CypherClass.DescifrarTexto(Usuarios.Rows[i]["Residencia"].ToString());
                }
            }

            return "";
        }

        public static string UsarioEmpresaLogin(string Usuario, string rfc)
        {

            try
            {
                DataTable dt = new DataTable();

                string Query = @"select distinct a.rfc, a.id_usuario, b.username
                            from dbo_sec_menuUSer as a, dbo_sec_usuario as b
                            where 
                            a.id_usuario = b.id_usuario 
                            and a.rfc = '@@RFC'
                            and b.username = '@@Usuario'";
                Query = Query.Replace("@@RFC", rfc.ToString());
                Query = Query.Replace("@@Usuario", Usuario.ToString());
                dt = SrvDB.ExecuteQuery_Get(Query);
                if (dt.Rows.Count > 0)
                {

                    return "OK";
                }
                return "Usuario o contraseña incorrectos";
            }
            catch (Exception Ex)
            {
                return Ex.ToString();

            }
        }
             public static string UsarioEmpresaRfcLogin(string Usuario, string rfc)
        {

            try
            {
                DataTable dt = new DataTable();

                string Query = @"select distinct a.rfc, a.id_usuario, b.username
                            from dbo_sec_usuario_rfc as a, dbo_sec_usuario as b
                            where 
                            a.id_usuario = b.id_usuario 
                            and a.rfc = '@@RFC'
                            and b.username = '@@Usuario'";
                Query = Query.Replace("@@RFC", rfc.ToString());
                Query = Query.Replace("@@Usuario", Usuario.ToString());
                dt = SrvDB.ExecuteQuery_Get(Query);
                if (dt.Rows.Count > 0)
                {

                    return "OK";
                }
                return "Usuario o contraseña incorrectos";
            }
            catch(Exception Ex)
            {
                return Ex.ToString();
            
            }

        
        }
    
    }
}
